home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / text / print / post17b.lzh / post.doc < prev    next >
Text File  |  1992-03-13  |  28KB  |  765 lines

  1. Postscript interpreter - user documentation
  2. ===========================================
  3.  
  4. Post V1.7 Copyright Adrian Aylward 1989, 1992
  5.  
  6. Free use and non-commercial reproduction of the binaries of the interpreter
  7. library (post.library) is permitted, providing that the copyright notices
  8. are not removed.  Distribution by disk libraries is permitted provided only
  9. a nominal copying fee is charged. Upload to commercial bulletin boards is
  10. also permitted, providing charges are only made for connect time, and there
  11. is no specific charge made for the file.
  12.  
  13. You may freely copy, use and modify the user interface program (post).
  14.  
  15. For queries and bug reports write to the author:
  16.  
  17.         Adrian Aylward,
  18.         20 Maidstone Road,
  19.         SWINDON,
  20.         Wiltshire.
  21.         UK.
  22.  
  23. No responsibilities accepted for bugs, but please let me know so I can fix
  24. them.
  25.  
  26. Introduction
  27. ============
  28.  
  29. "Post" is a software based PostScript interpreter, presently running on the
  30. Amiga.  The source code is written in C, and should be fairly portable to
  31. other machines.  It supports the full Adobe language, with only minor
  32. variations.
  33.  
  34. Prerequisites
  35. =============
  36.  
  37. Post uses the Arp library (V39+), primarily for its file requestor.  For
  38. interactive working under WorkBench 1.3 you also need ConMan (V1.3+).
  39.  Both these programs are widely available; any good BBS or PD/shareware
  40. library should have them. (ConMan is shareware.)  You may well have them
  41. installed on your machine already.
  42.  
  43. If you prefer not to install ConMan as your standard console handler, you
  44. will need to access it via an alternative device name, which you must
  45. specify by the CONDEV option.
  46.  
  47. You will need at least a megabyte of memory, more for high density printer
  48. output.
  49.  
  50. Command line interface
  51. ======================
  52.  
  53. usage:
  54.     post [files...] [IFF file] [SCREEN] [PRINTER] [INTERACTIVE]
  55.          [SIZE xyod..s..p.bc.] [MEM fhlv..] [CLOSEWB] [CONDEV con]
  56.  
  57. If you forget, type "post ?" to display this.
  58.  
  59. The input files
  60. ---------------
  61.  
  62. The interpreter reads the input files in turn.  When running interactively
  63. the input files are treated as startup files, and are rerun whenever the
  64. interpreter is restarted.  So you would normally specify just the standard
  65. startup file "init.ps", or an alternative of your own.  When running
  66. non-interactively you should in addition specify all the files you want to
  67. interpret, up to 5 in total; when the last is finished the interpreter will
  68. exit.
  69.  
  70. The file "*" is treated specially, in that it is always considered
  71. interactive. So it is possible to run Post entirely within a CLI window
  72. and still get the interactive prompts.
  73.  
  74. Printer output
  75. --------------
  76.  
  77. This is the default if neither the IFF nor SCREEN options are used, when
  78. running non-interactively.  The output is sent to the printer device as a
  79. graphic dump.
  80.  
  81. The interpreter will obtain default values for the page size, density, and
  82. number of colors from the current preferences.  If you use the default sizes
  83. make sure you have set the page size: run preferences and on the graphic 2
  84. screen set the width and height limits -  either bounded or absolute or in
  85. pixels.  The output defaults to black and white or 3 colour, according to
  86. the preferences.
  87.  
  88. IFF file output
  89. ---------------
  90.  
  91. This option will send the output to an IFF file.  Each IFF file contains a
  92. single FORM ILBM.  So that multiple pages may be created in a single run of
  93. the interpreter, sequence numbers are automatically generated:
  94.  
  95.     IFF path/fred*.pic   will generate  path/fred1.pic, path/fred2.pic ...
  96. and IFF path/fred??.pic  will generate  path/fred01.pic, path/fred02.pic ...
  97.  
  98. The default page size etc. is the same as for screen output.
  99.  
  100. SCREEN output
  101. -------------
  102.  
  103. This option  will send the output to a window on the interactive screen.  It
  104. implies interactive working.
  105.  
  106. You can generate screen, printer and IFF output at the same time.  However
  107. screen output has to use chip memory, and printer output at high resolution
  108. needs a large page buffer (about a megabyte for an A4 page at 300 dpi.). So
  109. if you attempt the two simultaneously you will probably run out of memory,
  110. unless your machine has 2 megabytes of chip ram.
  111.  
  112. The default screen size is the same as the workbench screen, but in
  113. interlace mode.  The default page size is A4, with a density of 75 pixels
  114. per inch.  The default number of colours is 3.  The page size is rounded up
  115. to the maximum size of the window.
  116.  
  117. The INTERACTIVE option
  118. ----------------------
  119.  
  120. This option causes the interpreter to run interactively.  A screen is opened
  121. and on it appears a requestor window for the parameters.  If you click on
  122. OK two windows will be opened, one for console input and output, and the
  123. other to display the page buffer.  Use the menus.
  124.  
  125. The SIZE option
  126. ---------------
  127.  
  128. The SIZE option sets the page size and density etc..
  129.  
  130.     SIZE "x..y..s..xo..yo..[x]d..[y]d..p.bc."
  131.  
  132. Up to 5 SIZE options are allowed; later values override earlier ones.
  133.  
  134. The page sizes ("x..y..s..") are in pixels, as decimal numbers; "s" sets
  135. the size of the bands, for band rendering to the printer.  The page offsets
  136. (xo..yo..) are in pixels, shifting the location of the bottom left of the
  137. bitmap relative to the PostScript logical page (origin at (0,0) in the
  138. initial user space). Densities ([x]d..[y]d..) are in pixels per inch; "xd"
  139. or "yd" set the x or y density, and "d" sets both.
  140.  
  141. The printer density can be set by "p"; its value should be in the range 
  142. 1 to 7.
  143.  
  144. Printer output uses the Workbench printer device. If you wish to print to
  145. a LaserJet or DeskJet you should use the "postlj" program instead, as it
  146. gives better control over page size and runs faster.
  147.  
  148. The number of colours is: "b" for black and white (1 bit plane), "c" or "c3"
  149. for 3 colour rgb (3 bit planes), and "c4" for 4 colour cmyk (4 bit planes).
  150.  
  151. The MEM option
  152. --------------
  153.  
  154. The MEM option controls the amount of memory allocated for workspace.
  155.  
  156.     MEM "v..f..l..h.."
  157.  
  158. Up to 5 MEM options are allowed; later values override earlier ones.
  159.  
  160.     Default  Minimum
  161.     -------  -------
  162.      f60000     1000     Font cache
  163.      h20000     1000     Halftone cache
  164.      v50000     5000     Virtual machine memory segment size
  165.      l10000     1000     Line drawing workspace segment size
  166.  
  167. In addition memory is allocated for the page buffer (one bit per pixel)
  168. and for drawing and imaging buffers.
  169.  
  170. Since most of the workspace is allocated automatically you will not usually
  171. need to adjust these options.  If your program is so large that you do need
  172. to increase any of these values, be aware that it is unlikely that it will
  173. run on any standard PostScript printer.
  174.  
  175. The font cache is used to store character bitmaps; it saves recalculating
  176. them each time they are needed, so text rendering becomes many times faster.
  177. The default value is reasonable for average sized machines; if you are
  178. trying to shoehorn things into a small machine you could try reducing it. Or
  179. if you are printing a document using a large number of different characters,
  180. fonts, and sizes you may be able to improve performance by increasing it.
  181.  
  182. The halftone cache holds halftone patterns used for simulating gray values.
  183. The default value will normally be satisfactory, but you might possibly need
  184. to increase it if you are using very large halftone patterns, for example
  185. for complex patterned fills.
  186.  
  187. The virtual machine memory is automatically allocated in segments as they
  188. are needed, up to a maximum of 63.  For most purposes you will not need
  189. to alter the segment size, but if you are running a gigantic program you
  190. might possibly need to increase it.
  191.  
  192. The line drawing workspace holds the current path, together with all the
  193. paths saved by a gsave operation.  It is automatically allocated in
  194. segments, up to a maximum of twenty.  The default size is sufficient for
  195. about 4000 path elements, enough for all normal programs.
  196.  
  197. The CLOSEWB option
  198. ------------------
  199.  
  200. If memory is tight, you can try using this option to close down WorkBench
  201. while Post is running.  This only works if there are no application
  202. windows open on the WorkBench screen.
  203.  
  204. The CONDEV option
  205. -----------------
  206.  
  207. The console handlers supplied with Workbench 1.3 did not have the
  208. capability of attaching a console to a window on a custom screen. So if
  209. you try to run Post interactively the console ouput will appear on the
  210. Workbench screen and screen output on its custom screen - which is not
  211. very convenient. So if you are running under 1.3 you should install the
  212. alternative (shareware) console handler called ConMan; you need version
  213. 1.3 or greater.
  214.  
  215. If you have Workbench 2.0 this is built into the standard console handler,
  216. so there si no need to install ConMan.
  217.  
  218. If you want to use a console handler installed using an alternative device
  219. name you can specify it using the CONDEV option.
  220.  
  221. Default values for CONDV are
  222.  
  223.         CON:W               (WorkBench 1.3)
  224.         CON://///WINDOW     (Workbench 2.0)
  225.  
  226. Post will append to these strings the hexadecimal address of the interactive
  227. window, and use the resulting filename to open the console stream.
  228.  
  229. Examples
  230. --------
  231.  
  232. To run postscript programs interactively, rendering to the screen:
  233.  
  234.     post init.ps screen
  235.  
  236. To print a file with many big characters using a large font cache and
  237. increasing the path limit:
  238.  
  239.     post init.ps myfile.ps printer mem f500000l200000
  240.  
  241. To render a series of 640 * 512 pictures at 762 dpi. to iff files t:i01,
  242. t:i02 etc.:
  243.  
  244.     post init.ps mypics.ps iff t:i?? size x640y512d72
  245.  
  246. The WorkBench interface
  247. =======================
  248.  
  249. Just click on the icon.  It always runs interactively.  You can set up
  250. default arguments by setting the ToolTypes; add a string "ARGS=...."
  251. and it will be parsed just like the CLI startup.  For example
  252. "ARGS=init.ps screen" will define the standard startup file and make the
  253. screen the default output.
  254.  
  255. The Menus
  256. =========
  257.  
  258. Project
  259.     Restart              Takes you back to the parameters requestor, after
  260.                          which the interpreter is reinitialised.
  261.  
  262.     Quit                 Quit from the program
  263.  
  264. File
  265.     Load font            Loads a file from the PSFonts: directory by default
  266.  
  267.     Load file            Loads a file, without saving or restoring the VM
  268.  
  269.     Run file             Runs a file, saving VM before and restoring after
  270.  
  271.     Interactive          Interprets interactive input
  272.  
  273. Control
  274.     Pause every page     Toggles pause every showpage/copypage
  275.  
  276.     Continue after pause Does just that
  277.  
  278.     Interrupt            Sends a break; equivalent to CTRL/C
  279.  
  280.     Kill                 Generates an interrupt that cannot be trapped
  281.  
  282. Before and after executing a file the operand stack is cleared.  This is
  283. to prevent invalidrestore errors, particularly if interpretation ended in
  284. error with values on the stack.  If you need to leave things on the stack
  285. you will have to run the files from a driver file, or from the interactive
  286. window.  At the end of the file, (after any restore), the page is erased.
  287.  
  288. If you use the automatic font loading, as defined in the standard startup
  289. file "init.ps", the font will be discarded when the VM is restored.  To
  290. avoid repeated reloading of common fonts it may be better to use the "Load
  291. font" menu item to preload the ones you want.  N.B. there is no check to
  292. stop you loading the same one twice; it will probably work but it will
  293. waste memory.
  294.  
  295. Compatability
  296. =============
  297.  
  298. The interpreter is based upon the language (version "23.0") as described by
  299. the (red) book:
  300.  
  301.     "PostScript Language Reference Manual"
  302.     Adobe Systems Incorporated,
  303.     Addison-Wesley 1985, ISBN 0-201-10174-2
  304.  
  305. This is PostScript level 1, in Adobe terminology, as described in the first
  306. edition of the Red Book.
  307.  
  308. In addition, the 4 colour operators from level 2 are also supported. Level
  309. 2 PostScript is defined in the second edition:
  310.  
  311.     "PostScript Language Reference Manual (second edition)"
  312.     Adobe Systems Incorporated,
  313.     Addison-Wesley 1990, ISBN 0-201-18127-4
  314.  
  315. File handling
  316. -------------
  317.  
  318. The files %stdin, %stdout, %stderr are permanently open as far as the
  319. operating system is concerned.  Attempts to close them will invalidate the
  320. file object but not close them to the operating system.  If they are
  321. connected to a terminal they will be unbuffered, so output will be
  322. transmitted immediately, without waiting for a "flush".  The special files
  323. %statementedit and %lineedit are not supported.  There is no end of file
  324. control character.
  325.  
  326. Error handling
  327. --------------
  328.  
  329. All the standard Adobe error conditions are supported.  There also some
  330. additional errors:
  331.  
  332. The error "invalidstop" will be generated if a "stop" operator is executed
  333. not within any encolsing "stopped" context.
  334.  
  335. The error "memoryallocation" will be executed if the interpreter is unable
  336. to obtain sufficient memory from the operating system.
  337.  
  338. The error "kill" may be executed in response to an external command.  It
  339. bypasses the error handler in errordict, so that it is always possible to
  340. kill a postscript program, even one that traps its own errors.
  341.  
  342. The execution stack
  343. -------------------
  344.  
  345. The exact contents of the execution stack are not defined by the language
  346. reference manual, and cannot therefore be guaranteed to be the same as other
  347. implementations.  Dumping the stack is likely to yield useful debugging
  348. information but is not recommended for normal programming.
  349.  
  350. Colour mapping
  351. --------------
  352.  
  353. The interpreter can run with one bit plane (for black and white printers),
  354. 3 bit planes (red, green, blue) or 4 bit planes (cyan, magenta, yellow,
  355. black).  For screen output 3 bit planes are appropiate.  For a colour
  356. printer the 3 or 4 colour model can be used.  The output is always in
  357. binary; gray scale is supported only via the halftone mechanism.
  358.  
  359. For low resolution colour printers the 3 colour model is probably best.
  360. The 4 color model is for high resolution colour printers that can generate
  361. high frequency halftone screens, where a fourth screen is used to improve
  362. the quality of the blacks and grays.
  363.  
  364. (N.B. the preferences printer drivers only handle 3 colour model, so if
  365. you want to use the 4 colour model you will probably need to generate an
  366. IFF file and write your own print dump program.  They will however
  367. automatically use black the ribbon/ink if the printer has one)
  368.  
  369. The transformations between the RGB and the HSB models are based on those in
  370. the book:
  371.  
  372.     "Procedural Elements for Computer Graphics"
  373.     David F. Rogers,
  374.     McGraw-Hill 1985, ISBN 0-E07-053534-5.
  375.  
  376. Band Rendering
  377. --------------
  378.  
  379. For a high resolution printer the page buffer can be quite large (a megabyte
  380. or so).  If you don't have enough memory to hold the entire page at once you
  381. can render each one in several bands.  Set the "SIZE s..." option to the
  382. largest band size you have space for.  (For matrix printers it will probably
  383. be best to make it a multiple of the number of printer pins times the number
  384. of vertically displaced passes).  Then run the postscript program generating
  385. each page once for each band, using the "setband" operator, which is
  386. described below, to set the base for each band.  Start at a base of zero
  387. and increment the base by the band size until you reach the page height.
  388. Each band is sent to the printer as a separate graphic dump; the last band
  389. generates a form feed to eject the page.  You can use the "currentband"
  390. operator to calculate the number of bands needed:
  391.  
  392.     currentband 1 sub { setband pageproc } for 0 setband
  393.  
  394. will execute "pageproc" once for each band (remaining) on the page.  The
  395. procedure should execute copypage (or showpage) exactly once per iteration.
  396.  
  397. This technique is only suitable for printer output.  There is a special
  398. driver program "postband" that handles this automatically for programs
  399. that conform to the Adobe structuring conventions.
  400.  
  401. Fonts
  402. -----
  403.  
  404. There are no fonts built in to the interpreter; they must all be downloaded.
  405. The findfont operator will execute the error invalidfont if the font you
  406. request is not present in the font dictionary.  You can redefine it, perhaps
  407. to search the Unix/Amiga filing system to automatically download fonts or to
  408. substitute a default font.  See the standard startup file.
  409.  
  410. Both type 1 (Adobe encrypted format) and type 3 (standard PostScript as per
  411. the red book) fonts are now supported.  In addition the IBM font format can
  412. be read directly.
  413.  
  414. The font caching will work significantly better if all your fonts have
  415. UniqueID's.  Then repeated makes of the same font with the same matrix will
  416. be cached, and cached character bitmaps can be retained even if the font
  417. is removed by a restore operation.  N.B. if fonts are downloaded after a
  418. save they will be removed by the corresponding restore; in the interests of
  419. efficiency it may therefore be better to preload them.
  420.  
  421. Other features
  422. --------------
  423.  
  424. Names of the form //name are looked up immediately by the scanner, and
  425. packed arrays have been implemented.  These features were not on the
  426. original Adobe red book, but were added to the language specification later.
  427.  
  428. When scanning the contents of a string, if there any embedded strings the
  429. escape sequences are interpreted just as they are in a file.  This follows
  430. the specification of the more recent Adobe interpreters (including display
  431. PostScript) and not the original red book.
  432.  
  433. Operators omitted or changed
  434. ----------------------------
  435.  
  436.     banddevice
  437.  
  438. Not appropiate for the Unix/Amiga environment.
  439.  
  440.     bytesavailable
  441.  
  442. Since we can't tell how many bytes are available we always return -1.
  443.  
  444.     charpath
  445.  
  446. Meets the level 2 spec.  At the end of the string a moveto is appended to
  447. move to the correct origin for the next character.  (So the current point
  448. is advanded by the width of the string.)
  449.  
  450.     copypage
  451.  
  452. For printer output this works like the standard.  The number of pages
  453. printed is equal to #copies.  For screen output it does not need to do
  454. anything, as the screen is not buffered.  For IFF file output it writes the
  455. page to the next file.
  456.  
  457.     echo
  458.  
  459. Not appropiate for the Unix/Amiga environment.
  460.  
  461.     eexec
  462.  
  463. This is implemented as per the Adobe type 1 fonts book.  Its operand must be
  464. a file, which must match the object on top of the execution stack.  It can be
  465. terminated only by a closefile (which terminates the eexec but does not
  466. actually close the file).  So the sequences "currentfile eexec" and
  467. "currentfile closefile" as described in the book will work, but other
  468. combinations will likely fail.
  469.  
  470.     executive
  471.  
  472. There is no executive, as the interpreter supports interactive usage
  473. directly.
  474.  
  475.     findfont
  476.  
  477. Looks in the FontDirectory.  If it can't find the supplied key, it executes
  478. the error invalidfont.
  479.  
  480.     flushfile
  481.  
  482. We don't check for errors when flushing an input file, to prevent recursion
  483. in the error handler.
  484.  
  485.     framedevice
  486.  
  487. Not appropiate for the Unix/Amiga environment.
  488.  
  489.     pathbbox
  490.  
  491. Meets the level 2 spec.  If the path ends with a moveto that is not the only
  492. element then it is ignored when calculating the bounding box.  This means
  493. that the sequence "charpath pathbbox" will determine the bounds of the
  494. character(s), not including the empty space after the final character.  See
  495. also "charpath".
  496.  
  497.     prompt
  498.  
  499. Not called by the interpreter.  See "prompts" instead.
  500.  
  501.     renderbands
  502.  
  503. Not appropiate for the Unix/Amiga environment.
  504.  
  505.     resetfile
  506.  
  507. Does nothing.
  508.  
  509.     showpage
  510.  
  511. See the notes for copypage above.
  512.  
  513.     usertime
  514.  
  515. Returns the time elapsed since the interpreter started, with a resolution of
  516. one second.
  517.  
  518. Operators added
  519. ---------------
  520.  
  521.     currentband
  522.  
  523.         "currentband" base size height
  524.  
  525. Returns the base of the current band, size of each band, and total height
  526. of the page.
  527.  
  528.     setband
  529.  
  530.         base "setband"
  531.  
  532. Sets the base height of the band being rendered.  The value must be greater
  533. than or equal to zero and less than the total height of the page.
  534.  
  535.     fontfile
  536.  
  537.         (filename) "fontfile"
  538.  
  539. Opens a file for reading.  If the first byte is hex "80" the file is assumed
  540. to be in IBM font format, and its contents are converted to standard
  541. ascii/binary as they are read.  The standard input file (%stdin) is never in
  542. IBM font format.
  543.  
  544.     invalidstop
  545.  
  546.         (error)
  547.  
  548. A "stop" has been executed for which there is no dynamically enclosing
  549. "stopped" context.
  550.  
  551.     prompts
  552.  
  553.         string string "prompts"
  554.  
  555. The first string is used as the prompt when the interpreter is scanning
  556. terminal input and executing it immediately; the second string is used when
  557. execution is defered while scanning the contents of a procedure "{ ... }".
  558. No prompt is given when a newline is encountered within a string.
  559.  
  560.     vmhwm
  561.  
  562.         "vmhwm" hwmused maximum
  563.  
  564. Returns two integers: the high water mark of the amount virtual memory used
  565. since the program was first started or the last "vmhwm", and the maximum
  566. available amount of memory.
  567.  
  568.     callextfunc
  569.  
  570.         result arg1 arg2 ... argc func "callextfunc" result
  571.  
  572. Calls an external function using a C calling sequence.  This operator is not
  573. available for use by ordinary PostScript programs; it can only be used when
  574. the library is called with an external function table supplied as an argument
  575. (see the library interface documentation for details).  The "func" argument
  576. is the index of the function in the external call table, and "argc" is the
  577. number of parameters; both must be non-negative integers.  The result is
  578. the object in which the result will be placed.  If it a null then no result
  579. will be returned and the null object will be discarded; otherwise it must
  580. match the type of the result returned from the function.  For both result and
  581. parameters bool and integer types will work OK; real types will work if your
  582. C compiler passes them just like ints (use ANSI prototypes so it does not
  583. expand them to double).  For string parameters the address is passed.  Arrays
  584. may be passed as parameters, but they are only useful if you know their
  585. PostScript object representation.  The maximum number of parameters
  586. permitted is 20.
  587.  
  588. Miscellaneous
  589. -------------
  590.  
  591. The system dictionary is left writeable so that standard preludes can add
  592. things to it - possibly removing write permission when they have finished.
  593. Similarly FontDirectory is writeable, so that it is possible to add entries
  594. without using definefont.
  595.  
  596. Device space
  597. ------------
  598.  
  599. The largest device that the interpreter can handle is 30000 by 30000
  600. pixels.  In practice you will probably run out of memory long before
  601. reaching this limit.
  602.  
  603. Known Bugs
  604. ==========
  605.  
  606. If you close down WorkBench the menus sometimes get truncated and slightly
  607. corrupted.  I suspect this is a Workbench/Intuition problem.
  608.  
  609. If you type CTRL/C to abort if the printer is not ready then strange things
  610. may happen on subsequent attempts to print.
  611.  
  612. N.B. if you run very low on memory, Intuition may behave strangely, and
  613. refuse to resize windows etc..  This is not a bug in Post.
  614.  
  615. If you type CTRL/backslash in the interactive window you won't be able to
  616. run interactively again until a restart.
  617.  
  618. Post tries to keep the console window active, so that all keyboard input
  619. goes there.  It will probably be incompatible with mouse handlers that
  620. automatically activate the window under the cursor.
  621.  
  622. Versions
  623. ========
  624.  
  625.     V0.0  14-Nov-89 (prerelease)
  626.  
  627. The original.
  628.  
  629.     V0.1  06-Dec-89 (prerelease)
  630.  
  631. Image routines added.
  632.  
  633. Range checks eased on gray levels and colours etc..
  634.  
  635. Area filling speeded up, matrix manipulation and colour mapping rewritten,
  636. numeric conditioning improved for path fill.
  637.  
  638. Bugs fixed: syntax error, == string escapes, error handling and quit when
  639. recursing, vm error handling, integer overflow in path fill, matrix save,
  640. interrupt after printing page, dictionary second save, name table restore,
  641. boolean type checking, multiple halftone screens memory allocation.
  642.  
  643.     V0.2  07-Jan-90 (prerelease)
  644.  
  645. Font and character routines added.  Null device added.  Band rendering of
  646. printer output added.
  647.  
  648. Matrix manipulation rewritten again.  Interpreter recursion rewritten.
  649. Allocate stacks dynamically.
  650.  
  651. Bugs fixed: missing access checks on strings, scan token negative chars,
  652. depth check in path flattening, pathbbox, strings or null objects as
  653. dictionary keys, shade after grestore(all), fill/image with clip region,
  654. clip unclosed subpath, dictstack/execstack.
  655.  
  656.     V1.0  12-Feb-90
  657.  
  658. Support for big scrollable windows added.  Menu handler added with port
  659. name option.  Workbench startup added with parameters requestor window.
  660.  
  661. Hex string scan optimised.  Break now CTRL/C only, not CTRL/D.
  662.  
  663. Bugs fixed: aspect ratio in iff file, clipping pictures much wider than the
  664. page.
  665.  
  666.     V1.1  27-Mar-90
  667.  
  668. Interpreter made into shared library.  Message port interface removed.
  669. Band printing driver now included.
  670.  
  671. Immediate lookup of //name added.  Packed arrays added.  CR and CRLF now
  672. converted to LF for readline and when scaning tokens from a file.  Copypage
  673. now takes account of #copies. 
  674.  
  675. Bugs fixed: slow images where strings are not rectangles, attributes after
  676. copy and bind, charpath with fonts using gsave, iff run compression,
  677. setundercolorremoval now conforms to Adobe spec, make errorname literal,
  678. slow images repositioned by 1/2 pixel.
  679.  
  680.     V1.2  14-Oct-90
  681.  
  682. Allow multiple SIZE and MEM options.
  683.  
  684. Page offset option added, page size defaults to A4, integer gadgets checked
  685. for +ve values.
  686.  
  687. Type 1 fonts, IBM font format, encrypted files, eexec operator added.
  688.  
  689. Bugs fixed: location zero not zero, printer device signals, proc arrays not
  690. executable, bind packed arrays, restore closing files, makefont matrices not
  691. commutative, makefont with translation, error handling during recursion,
  692. graphics state within buildchar proc, miterlimit less that sqrt(2), cvs
  693. copying too many bytes, solid lines after dashes, floating point error trap
  694. recursion (2620 version on 68882), check for fpu present, charpath with null
  695. character path, error handling loading file, invalid restore check,
  696. writehexstring.
  697.  
  698.     V1.3  27-Oct-90
  699.  
  700. LaserJet driver added.
  701.  
  702. Interface fixes: Menus no longer ghost after startup file error and restart,
  703. pause status is now retained over a restart, printer preferences page size
  704. is now handled correctly, no longer crashes if arp.library is missing.
  705.  
  706. Bugs fixed: IBM binary eexec sections beginning with white space, funny
  707. characters in error message command names, hints with stems of negative
  708. width, font character cache sizing, tune baseline alignment and flex,
  709. eexec lines ending in CR (not CRLF), aload packed arrays, zero length
  710. charstrings, font character cache hash chains.
  711.  
  712.     V1.4  22-Jan-91
  713.  
  714. External function call interface added.  New flexible memory allocation for
  715. vm and paths; new error "memoryallocation".  More flexible font cache limit.
  716.  
  717. Interface fixes: Memory Fonts/Paths gadgets transposed, drag scroll bars
  718. under 2.0.
  719.  
  720. Bugs fixed: writehexstring, zero height clipped paths, $error in userdict,
  721. undocumented charstring codes, halftone cacheing, mixed type 1 and 3 fonts.
  722.  
  723.     V1.5  01-Mar-91
  724.  
  725. Type 1 font character rendering improved (though slower).
  726.  
  727. Fix printer page size selection (inches).  Printer output now truncates to
  728. maximum dump size, to prevent scaling.
  729.  
  730. Bugs fixed: path fill at top of clip path, free first vm segment, rotate
  731. scale and translate with matrix operands, cached characters within clip path,
  732. long clip paths, clippath not default clip path, hollow clip paths, setband.
  733.  
  734.     V1.6  19-Apr-91
  735.  
  736. Version defined as real number string in init.ps.  Define ISOLatin1 encoding
  737. vector.
  738.  
  739. New menu and error "kill".
  740.  
  741. New error name string library entry.
  742.  
  743. Pathbbox now meets level 2 spec.  Allow Encoding length less than 256.  Use
  744. .notdef for type 1 buildchar.  Increase $error dictionary size; move $error
  745. to systemdict.  Allow name operands to length operator.  New operator
  746. cleardictstack.  Change cvrs to correct spec.
  747.  
  748. Bugs fixed: fast image positioning when ydir negative.
  749.  
  750.     V1.7  12-Mar-92
  751.  
  752. Post no treats "*" as interactive. New specification for CONDEV option,
  753. should work with Workbench 2.0.
  754.  
  755. PostLJ new page size options and now works with DeskJet.
  756.  
  757.  
  758. Type 1 font rendering now interpolates between hints.
  759.  
  760. Bugs fixed: Strings as dictionary keys, type 1 fonts etc. with white space
  761. after eexec, arcs of zero radius, stroking lines of zero length, roll of
  762. zero items, image and kshow procs with strange stack discipline, setflat
  763. values out of range.
  764.  
  765.